美团面试全流程详解(一面 + 二面)

您所在的位置:网站首页 美团java笔试题 问卷调查 美团面试全流程详解(一面 + 二面)

美团面试全流程详解(一面 + 二面)

2024-01-30 11:56| 来源: 网络整理| 查看: 265

叮。。。。。美团来电。这次不是外卖而是电话面试。

所报岗位为后端 / 服务端开发,但是从我的复盘来看,这和 Java 后端开发的内容差不多,除了部分的语言特性外,还是四大件基础知识为重;

下面我们来看看都问了啥,小心下次面你的时候就有这些问题哦

如果你问我,看了这些题就完事了?

非也,这只是开始,你需要学习的还有很多,知道路子是怎么走才是重要的勒。

开始之前,我们先看提纲,大家默默的想一想,如果是你,你将怎么去回答这个问题,然后再看我的回答也许更佳哈。

提纲

一面 (40 分钟) 自我介绍 老规矩,我叫啥,啥专业,技术栈是啥,能做啥 怎么理解分布式

对于面试官而言,也没多期望你们对分布式的理解到多深的地步,只是希望你们能对其有个初步的了解即可。

不管是高登摩尔提出的摩尔定律还是 Gordon Moore 坚持的 2 版本是啥;

总之如果你的系统需承载的计算量的增长速度大于摩尔定律的预测,那么在未来的某一个时间点,集中式系统将无法承载你所需的计算量。

在整个计算机系统发展的过程中,最实际的还是经济的元素。

人们发现使用更加廉价的机器,组合在一起的分布式系统,除了可以获得超过 CPU 发展速度的性能以外,还可以有更好的性价比,所以得出如下结论:

无论是要以低价格获得普通的性能,还是要以较高的价格获得极高的性能,分布式系统都能够满足。

并且受规模效应的影响,系统越大,性价比带来 的收益越高。

随着计算机的飞速发展,科学家们发现分布式系统相比于集中式系统的另一个很明显的优势就是:具有更高的可用性。

假设使用 10 个能够承载 10000 流量相同的节点,其中的两个节点挂了,只要实际的流量不超过 8000,那么系统仍然正常运转。

说这么多,分布式系统还是建立在「分治」和「冗余」的基础上,这也就是分布式系统的本质

那么分治是什么?

这和我们大脑解决问题类似,大问题分解为小问题,然后治理最后归并。

分治

为什么要这样做? 小问题容易解决,解决了众多的子问题,大问题也就更容易解决啦 如果拆分的父子问题有依赖关系怎么办?

大问题拆分的过程中,非常重要的即不同分支的子问题不能相互依赖,需要各自独立;

因为如果存在依赖关系,父子问题就失去了「归并」的意义,那么在开发中,这就是「聚合度」和「内聚度」的问题。

什么是聚合度和内聚度?

所谓聚合度即软件系统中各个模块的相互依赖程度。

比如在调用 A 方法的时候都需要同步调用方法 B,显然这样的耦合度就高

所谓内聚度即模块之间具有共同点的相似程度,所以在拆分的时候要尤其注意这两点。

什么是冗余?

这里的冗余不是代码的冗余,而是容许系统在一定范围内出现故障,但对系统的影响很小

冗余

如上图将冗余的节点部署在单独的服务器,完全是为了备用而做的冗余;

如果不出现故障,那么资源是不是就浪费了,所以大多数情况会使用诸如双主多活、读写分离之类的概念提高资源利用率。

其实在生活中冗余也很常见。

比如大部分的汽车系统中的底层控制系统也是有冗余机制,飞机发动机为什么是偶数,也是同样的道理。

写个代码热热身 ---- 栈实现队列 classMyQueue{ public: stackstIn; stackstOut; /**Initializeyourdatastructurehere.*/ MyQueue(){ } /**Pushelementxtothebackofqueue.*/ voidpush(intx){ stIn.push(x); } /**Removestheelementfrominfrontofqueueandreturnsthatelement.*/ intpop(){ //只有当stOut为空的时候,再从stIn里导入数据(导入stIn全部数据) if(stOut.empty()){ //从stIn导入数据直到stIn为空 while(!stIn.empty()){ stOut.push(stIn.top()); stIn.pop(); } } intresult=stOut.top(); stOut.pop(); returnresult; } /**Getthefrontelement.*/ intpeek(){ intres=this->pop();//直接使用已有的pop函数 stOut.push(res);//因为pop函数弹出了元素res,所以再添加回去 returnres; } /**Returnswhetherthequeueisempty.*/ boolempty(){ returnstIn.empty()&&stOut.empty(); } }; 介绍下第一个项目

注意:校招的的面试在我看来写两个项目差不多了,印象更深刻且自己的理解程度更好的放在上面。

面试之前一定要搞懂这三个问题,且在练习的时候想想怎么能引面试官上钩

项目的描述自己在项目中担任的角色,做了什么在项目中遇到什么难点,怎么处理,有没有测试过 说说快排思想?

如果我们的每一次分区操作都能正好将数组分成大小接近相等的两个小区间,那么快排的时间复杂度和归并是差不多的,所以其时间复杂度为 O (nlogn)

这里特别注意所谓的每次分区操作有个前提条件,即选择的 pivot 很合适,能挣好的将大区间对等的一分为二;

如果原来的数据是一件排好序的,我们选择最后一个元素为 pivot,这样每次分区得到的两个区间是不均等,我们需要进行大约 n 次分区操作,每次分区平均扫描 n/2 个元素,此时的复杂度将退化为 0 (n ^ 2)

注:一定要能手撕快排啊,这真是无数次会被考!!!

publicclassQuickSort{ publicstaticvoidmain(String[]args){ int[]arr={49,38,65,97,23,22,76,1,5,8,2,0,-1,22}; quickSort(arr,0,arr.length-1); System.out.println("排序后:"); for(inti:arr){ System.out.println(i); } } privatestaticvoidquickSort(int[]arr,intlow,inthigh){ if(low


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3